package test;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * @author sunzhuokun
 * @date 10:34 2024/5/11
 * @description 素数乘积
 * 加密算法在网络安全世界中无处不在，它利用了极大整数因数分解的难度，数据越大，安全系数越高，给定一个32位整数，请对其进行
 * 因数分解，找出是哪两个素数的乘积。
 * <p>
 * 对n进行分解质因数，应先找到一个最小的质数k，然后按下述步骤完成：
 * (1)如果这个质数恰等于n，则说明分解质因数的过程已经结束，打印即可。
 * (2)如果n>k，但n能被k整除，则应打印出k的值，并用n除以k的商,作为新的正整数n，重复执行第一步。
 * (3)如果n不能被k整除，则用k+1作为k的值，重复执行第一步
 */
public class PrimeNumMultiply_素数乘积 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        List<Integer> res = new ArrayList<>();
        for (int i = 2; i < Math.sqrt(num) + 1; i++) {
            if (num % i == 0) {
                int k = num / i;
                if (isPrimeNum(i) && isPrimeNum(k)) {
                    res.add(i);
                    res.add(k);
                }
            }
        }

        if (!res.isEmpty()) {
            System.out.println(res.get(0) + " " + res.get(1));
        } else {
            System.out.println("-1 -1");
        }

    }

    public static boolean isPrimeNum(int num) {
        for (int i = 2; i < Math.sqrt(num) + 1; i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }
}
